package com.ls.demo.http.service.impl;

import com.google.gson.Gson;
import com.ls.demo.bean.AirCommand;
import com.ls.demo.bean.Command;
import com.ls.demo.bean.RoomBoxInfo;
import com.ls.demo.enums.MessageAttrEnum;
import com.ls.demo.http.service.DownloadService;
import lombok.extern.java.Log;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author liShan
 * @date 2019/9/4 22:50
 * @see MessageAttrEnum
 */
@Service("downloadAirServiceImpl_21")
@Log
public class DownloadAirServiceImpl implements DownloadService {

    @Override
    public String execute(String str, Command command) {
        Gson gson = new Gson();
        AirCommand c = gson.fromJson(str, AirCommand.class);
        log.info(c.toString());
        RoomBoxInfo boxInfo = c.getBoxInfo();
        c.assCommand(command);
        List<String> datas = new ArrayList<>();
        this.data1(c, datas);
        this.data2(c, datas);
        this.data3(c, datas);
        this.data4(c, datas);
        this.data5(c, datas);
        this.data6(c, datas);
        this.data7(c, datas);
        command.setDataList(datas);
        return boxInfo.getBoxId();
    }

    /**
     * 拼接数据 1
     * @param c 参数
     * @param datas 数据的集合
     */
    private void data1(AirCommand c, List<String> datas){
        int val;
        val = c.getBcAddr() << 2 | c.getLock();
        datas.add(Integer.toHexString(val));
    }

    /**
     * 拼接数据 2
     * @param c 参数
     * @param datas 数据的集合
     */
    private void data2(AirCommand c, List<String> datas){
        datas.add(Integer.toHexString(c.getDesTemp()));
    }

    /**
     * 拼接数据 3
     * @param c 参数
     * @param datas 数据的集合
     */
    private void data3(AirCommand c, List<String> datas){
        datas.add(Integer.toHexString(c.getWindSpeed()));
    }

    /**
     * 拼接数据 4
     * @param c 参数
     * @param datas 数据的集合
     */
    private void data4(AirCommand c, List<String> datas){
        int val;
        val = c.getWindDir() << 3
                | c.getHeatingMode() << 1
                | c.getHeatingEff() << 1
                | c.getHeating();
        datas.add(Integer.toHexString(val));
    }

    /**
     * 拼接数据 5
     * @param c 参数
     * @param datas 数据的集合
     */
    private void data5(AirCommand c, List<String> datas){
        int val;
        val = c.getFreshDiff() << 4
                | c.getFresh() ;
        datas.add(Integer.toHexString(val));
    }

    /**
     * 拼接数据 6
     * @param c 参数
     * @param datas 数据的集合
     */
    private void data6(AirCommand c, List<String> datas){
        datas.add(Integer.toHexString(c.getColdHot()));
    }

    /**
     * 拼接数据 7
     * @param c 参数
     * @param datas 数据的集合
     */
    private void data7(AirCommand c, List<String> datas){
        int val;
        val = c.getCompTemp() << 1
                | c.getCompTempChange() << 6
                | c.getCompTempVal();
        datas.add(Integer.toHexString(val));
    }

}
